#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
     autor: João Rebocho Nº 6035
     data: 1 de Novembro de 2013
     obs: 3ª Parte do Trabalho de LP
'''

#imports da classe InterfaceTP6035
from wx import wx #@UnresolvedImport
import os

class InterfaceTP6035(wx.Frame):
    '''
    Nesta classe criei toda a interface do trabalho
    '''
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(InterfaceTP6035, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e todos os seus menus
        self.InitUI()
        pass
    def InitUI(self):
        '''
        Neste metodo é criado os vários menus e submenus da Interface
        Alem disso tambem é criado a caixa de texto
        '''
        #Criacao da barra de menu
        menubar = wx.MenuBar()
        
        #Criacao do menu Ficheiro
        menuFicheiro = wx.Menu()
        #Adicao do menu Ficheiro
        menuFicheiro.AppendSeparator()
        
        #Criacao do menu Ajuda       
        menuAjuda = wx.Menu()
        #Adicao do menu Ajuda
        menuAjuda.AppendSeparator()
        
        #Criacao do menu Grafico
        menuGraficos = wx.Menu()
        #Adicao do menu Grafico
        menuGraficos.AppendSeparator()

        #Criacao dos dois sub menus do menu Ficheiro
        abrir = wx.MenuItem(menuFicheiro, wx.ID_OPEN, '&Abrir\tCtrl+A')
        sair = wx.MenuItem(menuFicheiro, wx.ID_EXIT, '&Sair\tCtrl+S')
        
        #Criacao do sub menus do menu Ajuda
        ajuda = wx.MenuItem(menuAjuda, wx.ID_HELP, '&VerAjuda\tF1')
        
        #Criacao dos sub menus do menu Grafico
        numColocados = wx.MenuItem(menuGraficos, wx.ID_ABOUT, '&NumColocadosInstituição\tF2')
        perColocados = wx.MenuItem(menuGraficos, wx.ID_ANY, '&PerColocadosInstituição\tF3')
        vagasInstituicao = wx.MenuItem(menuGraficos, wx.ID_UP, '&VagaColocadosInstituição\tF4')
        numColocadosDis = wx.MenuItem(menuGraficos, wx.ID_ABOUT, '&NumColocadosInstituiçãoDis\tF5')
        perColocadosDis = wx.MenuItem(menuGraficos, wx.ID_ANY, '&PerColocadosInstituiçãoDis\tF6')
        vagasInstituicaoDis = wx.MenuItem(menuGraficos, wx.ID_UP, '&VagaColocadosInstituiçãoDis\tF7')

        #Adicicao dos sub menus abrir e sair ao menu Ficheiro
        menuFicheiro.AppendItem(abrir)
        menuFicheiro.AppendItem(sair)
                
        #Adicicao do sub menu ajuda ao menu Ajuda
        menuAjuda.AppendItem(ajuda)
        
        #Adicicao dos sub menus numColocados, perColocados, vagasInstituicao, numColocadosDis, perColocadosDis e vagasInstituicaoDis ao menu Grafico
        menuGraficos.AppendItem(numColocados)
        menuGraficos.AppendItem(perColocados)
        menuGraficos.AppendItem(vagasInstituicao)
        menuGraficos.AppendItem(numColocadosDis)
        menuGraficos.AppendItem(perColocadosDis)
        menuGraficos.AppendItem(vagasInstituicaoDis)
        
        
        #Chamada às funções que vai criar os eventos para cada função
        self.Bind(wx.EVT_MENU, self.OnAbrir, abrir)
        self.Bind(wx.EVT_MENU, self.OnSair, sair)
        self.Bind(wx.EVT_MENU, self.OnAjuda, ajuda)
        self.Bind(wx.EVT_MENU, self.OnNun, numColocados)
        self.Bind(wx.EVT_MENU, self.OnPer, perColocados)
        self.Bind(wx.EVT_MENU, self.OnVagas, vagasInstituicao)
        self.Bind(wx.EVT_MENU, self.OnNunDis, numColocadosDis)
        self.Bind(wx.EVT_MENU, self.OnPerDis, perColocadosDis)
        self.Bind(wx.EVT_MENU, self.OnVagasDis, vagasInstituicaoDis)
        
        #Criação do cursor de texto
        self.controlo = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        
        #Adiciona os varios menus à barra de menu
        menubar.Append(menuFicheiro, '&Ficheiro')
        menubar.Append(menuGraficos, '&Graficos')
        menubar.Append(menuAjuda, '&Ajuda')
        
        #Torna a barra de menu visivel
        self.SetMenuBar(menubar)
        
        #Tamanho da Janela
        self.SetSize((350, 250))
        #Titulo da Janela
        self.SetTitle('InterfaceTPLP6035')
        #Local onde a janela aparece
        self.Centre()
        #Torna a janela visivel
        self.Show(True)
        pass
        
    def OnAbrir(self, event):
        """ Open a file"""
        self.nomeDirectoria = ''
        dlg = wx.FileDialog(self, "Choose a file", self.nomeDirectoria, "", "*.*", wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            self.nomeFicheiro = dlg.GetFilename()
            self.nomeDirectoria = dlg.GetDirectory()
            f = open(os.path.join(self.nomeDirectoria, self.nomeFicheiro), 'r')
            self.controlo.SetValue(f.read())
            f.close()
        dlg.Destroy()
        pass
            
    def OnSair(self, event):
        '''
        Metodo que implementa o evento de fechar a janela
        '''
        self.Close()
        pass
    
    def OnAjuda(self, event):
        '''
        Metodo que implementa o evento de Ajuda o utilizador
        Neste caso Aperece numa caixa de dialogo o autor do Trabalho
        '''
        dlg = wx.MessageDialog(self, 'Interface Grafica do Trabalho Pratico de Lp Do Aluno João Rebocho Nº 6035', "GraficoNumeroDeColocadosNumaInstituição", wx.OK)
        dlg.ShowModal() # Show it
        dlg.Destroy() # finally destroy it when finished
        pass
        
    def OnNun(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Numero de Colocados numa instituicao
        '''
        frame_2.Show(1)
        pass
    def OnPer(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Percentagem de Colocados numa instituicao
        '''
        frame_3.Show(1)
        pass
    def OnVagas(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Numero de Vagas Por numa instituicao
        '''
        frame_4.Show(1)
        pass
    
    def OnNunDis(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Numero de Colocados num Distrito
        '''
        frame_2.Show(1)
        pass
    def OnPerDis(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Percentagem de Colocados num Distrito
        '''
        frame_3.Show(1)
        pass
    def OnVagasDis(self, event):
        '''
        Este metodo vai chamar a janela que comtem a imagem do Grafico de Numero de Vagas Por num Distrito
        '''
        frame_4.Show(1)
        pass
    
    pass
class GrafNumColocados(wx.Frame):
    '''
    Esta classe vai  implementar a janela que comtem a imagem do Grafico de Colocados numa instituicao
    '''
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafNumColocados, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Numero de Colocados instituicao
        self.InitUI()
        pass
        
    def InitUI(self):
        '''
        Neste metodo crio toda a interface para mostrar a imagem do grafico Numero de Colocados instituicao
        '''
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Guarda a imagem na variavel imagem1
        imagem1 = wx.Image("GrafNumColocados.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da JanelaS
        self.SetTitle('GrafNumColocados')
        pass
    
    
class GrafPerColocados(wx.Frame):
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafPerColocados, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Percentagem de Colocados instituicao
        self.InitUI()
        pass
        
    def InitUI(self):
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Grava o ficheiro na variavel imagem1
        imagem1 = wx.Image("GrafPerColocados.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da Janela
        self.SetTitle('GrafPerColocados')
        pass
    
class GrafVagColocados(wx.Frame):
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafVagColocados, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Vaga de Colocados instituicao
        self.InitUI()
        pass
        
    def InitUI(self):
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Grava o ficheiro na variavel imagem1
        imagem1 = wx.Image("GrafVagasColocados.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da Janela
        self.SetTitle('GrafVagasColocados')
        pass
    pass

class GrafNumColocadosDis(wx.Frame):
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafNumColocadosDis, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Numero de Colocados distrito
        self.InitUI()
        pass
    pass
        
    def InitUI(self):
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Grava o ficheiro na variavel imagem1
        imagem1 = wx.Image("GrafColocadosDistrito.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da Janela
        self.SetTitle('GrafNumColocados')
        pass
    pass
    
    
class GrafPerColocadosDis(wx.Frame):
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafPerColocadosDis, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Percentagem de Colocados distrito
        self.InitUI()
        pass
        
    def InitUI(self):
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Grava o ficheiro na variavel imagem1
        imagem1 = wx.Image("GrafPerColocadosDis.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da Janela
        self.SetTitle('GrafPerColocados')
        pass
    
class GrafVagColocadosDis(wx.Frame):
    def __init__(self, *args, **kwargs):
        #Chamada do construtor da classe
        super(GrafVagColocadosDis, self).__init__(*args, **kwargs)
        #Chamada da funcao que vai criar a janela e o seu layout neste casos é a imagem do grafico Vaga de Colocados distrito
        self.InitUI()
        pass
        
    def InitUI(self):
        #Criacao de um objecto do tipo panel
        panel = wx.Panel(self)
        #Grava o ficheiro na variavel imagem1
        imagem1 = wx.Image("GrafVagasColocados.png", wx.BITMAP_TYPE_ANY)
        #Mostra a imagem no ecra
        wx.StaticBitmap(panel, -1, wx.BitmapFromImage(imagem1), pos=(100,100))
        #Tamanho da janela
        self.SetSize((1000, 800))
        #Titulo da Janela
        self.SetTitle('GrafVagasColocados')
        pass
    pass
        



if __name__ == '__main__':
    '''
    Chamada das varias classes
    '''
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = InterfaceTP6035(None, -1, "")
    frame_2 = GrafNumColocados(None,-1,"")
    frame_3 = GrafPerColocados(None,-1,"")
    frame_4 = GrafVagColocados(None,-1,"")
    frame_5 = GrafNumColocadosDis(None, -1, "")
    frame_6 = GrafPerColocadosDis(None,-1,"")
    frame_7 = GrafVagColocadosDis(None,-1,"")
    
    app.SetTopWindow(frame_1)
    #Torna a frame_1 que é a classe que cria toda a interface visivel
    frame_1.Show()
    app.MainLoop()
